U.S. Pat. No. 6,311,221 of Raz et al. (“Raz”), which is incorporated herein by reference, describes various computer-implemented methods for streaming a software application from a server to a client. “Streaming” in this context refers to a technique in which only portions of a software application are downloaded from a host processing system (e.g., a server) to a target processing system (e.g., a client), and the application is executed on the client using only those downloaded portions while other portions of the application are downloaded to the client in the background on an as needed basis. For example, as described by Raz, a computer application can be divided into a set of modules, such as the various Java classes and data sets which comprise a Java applet. Once an initial module or modules are delivered to the client, the application begins to execute while additional modules are streamed in the background. The modules are streamed to the user in an order which is selected to deliver the modules before they are required by the locally executing software. The sequence of streaming can be varied in response to the manner in which the user operates the application to ensure that needed modules are delivered prior to use as often as possible. To reduce streaming time, the size of code files, such as library modules, can be reduced by substituting various coded procedures with shortened streaming “stub” procedures which act as link-time substitutes for the removed code. Suitable modules to replace are those which are not required for the initial execution of the application. As the application is running locally on the client, additional modules are streamed to the client and the stub code can be dynamically replaced as the substituted procedures are received. The stub procedure can point to a streaming engine which will request a missing procedure if the program calls it before it has been received at the client.
U.S. patent application Publication No. U.S. 2001/0034736 A1 of Eylon et al. (“Eylon '736”), which is incorporated herein by reference, describes client software that can be used to facilitate application streaming techniques. As described by Eylon '736, a client system can be provided with client-side streaming support software which establishes a virtual file system (“VFS”) and connects it to the client's operating system, such that the VFS appears to be a storage device. The VFS is accessed via a dedicated streaming file system driver (FSD) and is configured as a sparsely populated file system which appears to the operating system to contain the entire set of application files but, in practice, will typically contain only portions of selected files. Eylon '736 describes that a software application to be executed is stored as a set of blocks (“streamlets”) on a server, where each streamlet corresponds to a data block which would be processed by the native operating system running on the client system if the entire application were locally present. For example, the streamlets may be 4 kbyte blocks, since standard Windows systems utilize a 4 kbyte code page when loading data blocks from disk or in response to paging requests.
U.S. patent application Publication No. U.S. 2001/0037399 A1 of Eylon et al. (“Eylon '399”), which is incorporated herein by reference, addresses a server system that can be used to facilitate application streaming techniques. The server system comprises an application streaming manager which coordinates the transmission of application streamlets to a client system. To improve responsiveness of the application on the client side, the server system also comprises a predictive engine to determine an optimal order to provide streamlets to a client. The predictive engine operates on one or more predictive models which can be generated using information gathered from user interaction with the streaming application and monitoring the order in which various sections of the application's files are accessed as the application runs.
As described by Eylon '399, when the server receives a request from a client to start a particular streamed application for the first time, the file structure for the application is forwarded to the client. Preferably, a starting set of streamlets sufficient for enabling the application to start execution is forwarded to the client as well. A program thread to coordinate the pushing of streamlets to a given client is started on the server which actively pushes streamlets to the client in accordance with the predictive model and possibly additional data forwarded to the server from the client while the application executes.
Before an application can be streamed to a client, it must be packaged in an appropriate format. Application streaming technology such as described above can be based on packaging an application using “snapshot” techniques which are standard and common in the software packaging industry. Many software applications, however, are already packaged according to a well-known installation standard, such as the MSI installation standard, InstallShield installation format, WISE installation format, etc. The MSI installation standard, for example, defines the standard file format for application installation in a Microsoft Windows operating system environment. It is desirable, among other things, to be able to use, essentially “as is”, a package formatted according to any of numerous installation standards, with minimal manual intervention to convert it to a package usable for streaming.